home *** CD-ROM | disk | FTP | other *** search
- Kurzeinführung neue Features der V45 Shell:
-
- Neue Umleitungsargumente: Die altbekannten Umleitungsargumente der
- Shell >, >>, < und <> wurden erweitert und ausgebaut; damit beherrscht
- die Shell nun die folgenden Umleitungsargumente:
-
- >filename Umlenken der Ausgabe in eine Datei
- >>filename Anhängen der Ausgabe an eine Datei, ggf. Neuerstellen
- der Ausgabedatei
- <filename Umlenken der Eingabe aus einer Datei in das Kommando
- <>console Umlenken von Ein- und Ausgabe in die gleiche Datei.
- Bei der Datei sollte es sich entweder um einen Konsolen-
- treiber (CON:, RAW:, VNC:, AUX:) oder um NIL: handeln.
- Gewöhnliche Dateien werden hier nicht akzeptiert.
-
- *>filename Umlenken der Fehlerausgabe in eine Datei.
- Leider unterstützen nur sehr wenige Kommandos das Aus-
- geben von Fehlern in den Fehlerkanal, üblicherweise
- werden Fehlermeldungen leider in den Ausgabekanal
- geschrieben.
- Dieses Umleitungsargument ersetzt auch die Konsole des
- auszuführenden Kommandos, sollte es sich bei der Datei-
- bezeichnung um einen Konsolentreiber handeln.
- *>>filename Wie oben, nur wird die Fehlerausgabe an die gegebene
- Datei angehängt.
- *>< Umlenken der Fehlerausgabe in die gewöhnliche Ausgabe-
- datei. Dies entspricht gewöhnlich auch der Voreistellung.
- Ein Filenamenargument wird hier nicht benötigt.
- <<endmarker Umlenken der Eingabedatei auf die Skriptdatei; der
- Inhalt der Skriptdatei, in dem dieses Umlenkungsargument
- steht, wird bis zur spezifizierten Endmarkierung der
- Eingabestrom des Befehls.
-
- Das letzte Umlenkungsargument bedarf noch weiterer Erklärung: Dieses
- Umlenkungsargument findet typischerweise Verwendung in sogenannten
- Skript- oder "Batch"-Dateien. Hierbei stehen die Daten, die den Eingabe-
- strom des Kommandos formen sollen, direkt innerhalb des Skriptes.
- Alle Zeilen bis zu der Zeile mit der gegebenen Endmarkierung werden
- dann als Eingabestrom in den Befehl gefüttert, und die Ausführung
- wird unterhalb der Endmarkierung fortgesetzt. Dies demonstriert das
- folgende Skript:
-
- ask Prompt "Bitte eine Zahl eingeben: " numeric TO a <<endmarker
- 42
- endmarker
- echo $a
-
- Der "ask"-Befehl wartet auf die Eingabe einer Zahl auf seinem Ein-
- gabestrom. Normalerweise ist dies die Konsole, aber aufgrund des
- Umleitungsargumentes << kommen die Eingabedaten nun aus der Skript-
- datei selbst. Die Zahl "42" unterhalb des "ask" Befehles bildet also
- die Eingabe für "ask", und der "endmarker" terminiert diese Eingabe.
- Die Ausführung des Skriptes wird dann mit dem "echo" Befehl fortgesetzt.
-
- Die Endmarkierung ist dabei ein beliebig wählbarer Text, der nur zur
- Erkennung des Endes der einzulesenden Daten dient. Er ist nicht selbst
- Teil dieser Daten. Insbesondere wäre also
-
- ask Prompt "Bitte eine Zahl eingeben: " numeric TO a <<43
- 42
- 43
- echo $a
-
- äquivalent zum obigen Skript.
-
- Das Umlenken der Eingabe mittels "<<" funktioniert nicht im Zusammen-
- hang mit dem "RUN" Befehl. Verwenden Sie stattdessen das &-Zeichen
- (siehe unten) zum Starten von Befehlen im Hintergrund.
-
-
-
- Starten von Befehlen: Die V45 Shell erlaubt es ferner, ein Programm
- ähnlich wie durch "run" zu starten und dann sofort zur Shell zurück-
- zukehren. Dazu plaziere man ein einzelnes, durch Leerzeichen vom
- Rest der Kommandozeile separiertes "&"-Zeichen in die Befehlsargumente.
- Das & ist dann nicht selbst Teil des Kommandos, sondern ändert die
- Art der Befehlsausführung. Längerfristige Kommandos und größere Skripte
- können so im Hintergrund ausgeführt werden, ohne dass die Arbeit in der
- Shell anderweitig behindert wird. So startet etwa
-
- search from SYS:#? all "hallo" quiet &
-
- einen längerfristigen Suchvorgang nach dem Text "hallo" in allen Dateien
- innerhalb der Systempartition, und kehrt sofort in die Konsole zurück.
-
- Damit entspricht & fast, aber nicht ganz dem "run"-Kommando. Anders als
- "run" erhalten mit "&" gestartete Programme allerdings auch einen gültigen
- Eingabestrom und können so auf Benutzereingaben reagieren.
-
- Im Zusammenhang mit den ViNCEd-Konsolenhandler nimmt & ebenso eine Job-
- kontrolle vor. Das mittels "&" gestartete Kommando wird angehalten sobald
- es versucht, eine Ausgabe oder Benutzereingabe zu tätigen. Man kann dann
- mittels des ViNCEd-Skriptes "fg" dieses Kommando aktivieren und in den
- Vordergrund legen. Beispielsweise druckt das Kommando "list &" folgende
- Ausgaben auf den Schirm (Dateibezeichnungen und CLI-Nummern können von dem
- hier gezeigten abweichen):
-
- 7.SCSI:> list &
- [CLI 8] : list
- 7.SCSI:>
- [CLI 8] : list suspended. [ViNCEd output]
- 7.SCSI:>
-
- Die Shell im Vordergrund hat die CLI-Nummer 7, der List-Befehl bekommt
- die CLI-Nummer 8, und wurde angehalten, da er auf der Konsole Ausgaben
- vornehmen wollte. Mittels des Kommandos
-
- 7.SCSI:> fg 8
-
- wird der List-Befehl, der wie gesagt die CLI-Nummer 8 erhielt, nun fort-
- gesetzt.
-
-
- Skript-Dateien mit beliebigen Kommandointerpreter: Ab V45 der Shell
- können Skriptdateien auch an beliebige Kommandointerpreter weiter-
- gereicht werden. Dazu muss einerseits das "s"-Bit der Datei gesetzt
- sein, andererseits müssen die ersten beiden Zeichen einer Datei ent-
- weder "#!" oder ";!" sein. Der folgende Text stellt dann den Pfad
- zum Kommandointerpreter und weitere Argumente dar. Der Name des Skriptes
- wird dann zwischen den Namen des Interpreters und die folgenden Argu-
- mente eingefügt.
-
- Das folgende Beispielskript startet etwa den Interpreter "type"
- mittels des Argumentes "hex"
-
- ;! type hex
- Dies wird in Hexadezimal ausgegeben.
-
- Speichert man diesen Text unter dem Dateinamen "RAM:bla" und setzt
- mittels
-
- protect ram:Bla s add
-
- das "s"-Bit dieses Skriptes, so startet die Eingabe von "RAM:bla"
- den "type" Befehl mit den Argumenten "ram:bla hex" und gibt somit den
- Inhalt der Datei selbst aus:
-
- 7.SCSI:> ram:bla
- 0000: 3B212074 79706520 6865780A 44696573 ;! type hex.Dies
- 0010: 20776972 6420696E 20486578 6164657A wird in Hexadez
- 0020: 696D616C 20617573 67656765 62656E2E imal ausgegeben.
- 0030: 0A .
-
- Im Zusammenhang mit Skript-basierten Sprachen wie "perl" lassen sich
- so komplette Skripte durch Eingabe des Skriptnamens starten.
-
- Wie schon unter V40 startet ein Skript, das mit "/*" eingeleitet wird,
- den Rexx-Befehlsinterpreter.
-
- Ohne "/*" und "#!" oder ";!" wird ein Skript als Shell-Skript ver-
- standen und mittels des "Execute"-Befehles interpretiert.
-
-
- Anzeigen von Datentypen: Ist das "e"-Bit einer Datei nicht gesetzt,
- handelt es sich hierbei um eine anzeigbare Datei und ist die Shell-
- Variable "VIEWER" gesetzt, so wird beim Eingeben des Dateinamens das
- mittels VIEWER gegebene Anzeigeprogramm gestartet. Typischerweise
- sollte man etwa mittels
-
- Setenv SAVE VIEWER MultiView
-
- das Os-Programm "MultiView" als Anzeigeprogramm auswählen. Ist
- dann das "e"-Bit der Datei "Shell.guide" gelöscht, so kann durch
- Eingabe von
-
- Shell.guide
-
- der Inhalt dieser Datei angezeigt werden. Der Befehl, den die
- Shell dann ausführt, entspricht
-
- $VIEWER Shell.guide
-
- bzw.
-
- Multiview Shell.guide
-
-
- Das H-Bit und residente Kommandos: Ist von einer ausführbaren Datei
- sowohl das "p" als auch das "h"-Bit gesetzt, so wird dieser Befehl
- bei seiner ersten Anwendung automatisch resident. Dies entspricht
- der Funktion der V39 Shell, die aus Platzgründen in V40 abgeschaltet
- werden musste.
-
-
- Shell-Variablen: Die V45-Shell kann explizt erfragen, ob eine gegebene
- Variable definiert wurde. Ist "var" der Name einer Variable, so
- resultiert $?var in 1, falls die Variable gesetzt wurde, und 0 sonst.
- $??var wird 1, wenn var eine globale Variable ist - dies sind Variablen,
- die durch SetEnv erstellt werden - und ist ansonsten null.
-
-
- Das umgekehrte Hochkomma: In Gegensatz zur V40-Shell können auf einer
- Kommandozeile auch mehrere umgekehrte Hochkomma-Paare stehen. Die
- mittels ` eingeschlossenen Befehle werden ausgeführt, und ihre Ausgabe
- in die Kommandozeile anstelle des umgekehrten Hochkomma-Paares einge-
- fügt. Dabei werden Zeilenvorschübe durch Leerzeichen ersetzt.
-
- Im Gegensatz zur V40 Shell findet dabei keine Einschränkung der Kommando-
- zeilenlänge statt. Die so erzeugten Kommandozeilen können prinzipbedingt
- sehr lang werden; obwohl die Shell selbst nun keine Probleme mehr mit
- langen Kommandos hat, können einige Befehle diese dennoch nicht korrekt
- abarbeiten.
-
- Ferner darf nun auch das auszuführende Kommando selbst durch `` generiert
- werden. So zeigt etwa
-
- `echo list`
-
- den Inhalt der augenblicklichen Directory an, indem der "list"-Befehl
- aus der Ausgabe von "echo" generiert wird.
-
-
- Rekursive Aliase: Enthält der Inhalt eines mittels "alias" erzeugten
- Befehles erneut selbst ein alias, so wird dieses Alias ebenso aufge-
- löst. Um endlose Schleifen zu verhindern, löst die Shell allerdings
- innerhalb jeder Kommandozeile ein Alias nur maximal einmal auf. In
- der V40 Shell fand keine rekursive Auflösung von Aliasen statt.
-
-
- Neue Kommandos: Die V45 Shell verfügt über drei neue eingebaute
- Kommandos namens "PushCD", "SwapCD" and "PopCD". PushCD legt das
- augenblickliche Verzeichnis in einen Stapelspeicher und wechselt
- wie "CD" in das angegebene Verzeichnis. PopCD entnimmt die oberste
- Ebene dieses Stapelspeichers und setzt das aktuelle Verzeichnis
- auf das so gefundene Verzeichnis. Mittels "PushCD" merkt sich somit
- die Shell das jeweils letzte Verzeichnis, das mit "PopCD" dann
- wiederhergestellt werden kann. "SwapCD" vertauscht die oberste,
- oder eine anzugebene Ebene dieses Verzeichnisstapels mit dem
- aktuellen Verzeichnis. Lesen Sie bitte für genauere Angaben die
- Dateien "PushCD", "PopCD" und "SwapCD", die auch weitere Argumente
- dieser nützlichen Befehle besprechen.
-
- Erweiterte Kommandos: Einige eingebaute Kommandos wurden erweitert
- und ergänzt.
-
- PATH erhielt eine neue Option "HEAD", mit der ein weitere Suchpfad
- an den Anfang der Liste der Pfade eingefügt wird. Ohne "HEAD" wird
- wie bisher ein weiterer Pfad an das Ende der Liste angefügt. Damit
- erhält ein mittels "HEAD" eingefügtes Verzeichnis eine höhere Prio-
- rität als bereits vorhandene Suchpfade.
-
- SetENV und UnSetENV bekamen eine neue Option "SAVE" mittels der
- die Änderungen der Umgebungsvariablen permanent abgespeichert
- werden.
-
- ASK kann jetzt nicht nur Ja/Nein Eingaben beantworten, sondern kann
- auch Zahlen oder ganze Texte als Eingabe erwarten. Diese Eingabe
- erscheint dann entweder im Ausgabepfad von "ASK", oder wird mittels
- des "TO"-Argumentes in eine anzugebene Variable geschrieben.
-
- ASK Prompt "Bitte eine Zahl eingeben: " numeric to a
-
- bittet um die Eingabe einer Zahl,
-
- ASK Prompt "Bitte einen Text eingeben: " string to a
-
- bittet um die Eingabe eines Textes. In beiden Fällen wird
- die Eingabe in der Shell-Variablen $a abgelegt.
-
-
- Weitere kleinere Änderungen und Fehlerbereinigungen wurden an
- "Run", "Resident", "Set", "unSet", "Alias" und "unAlias" vorgenommen.
-
-
-
- Weitere Kleinigkeiten:
-
- - Das "implizite" Wechseln des aktuellen Verzeichnisses funktionierte
- in der V40 Shell nicht korrekt, wenn der Verzeichnisname in Anführungs-
- stiche eingeschlossen war. Dieser Fehler wurde in V45 behoben. So
- wechselt etwa der Befehl
-
- "RAM Disk:"
-
- korrekt in die RAM-Disk.
-
- - Das Verhalten des Escape-Zeichens * wurde an diversen Stellen
- repariert.
-
- - Werden Variablen oder ``-Sequenzen innerhalb von Anführungszeichen
- aufgelöst, so entfernt die Shell die äußeren Anführungszeichen.
- Dieses Verhalten kann mittels "set keepdoublequotes on" ausge-
- schaltet werden,
-
- - Stack-Erweiterung von Shell-Befehlen: Findet die Shell innerhalb einer
- Befehlsdatei den Text "$STACK:" gefolgt von einer Dezimalzahl und einem
- Zeilenvorschub, so wird diese Zahl als minimale Größe des Stapelspeichers
- für den Befehl verstanden und der Stapelspeicher ggf. auf diese Größe
- erweitert.
-
- Genaueres zu weiteren Änderungen zur Kommandosyntax der Shell findet
- sich in der englischsprachigen Datei "Shell".
-